var mongoose = require("mongoose");
var bcrypt = require("bcrypt");
var SALT_WORK_FACTOR = 10;

var UserSchema = new mongoose.Schema({
    name: {
        unique: true, // 唯一
        type: String,
    },
    password: String,
    // user
    // admin
    // super admin 
    // role: String,
    // 默认注册 用户 :0 普通用户
    // 用户 :1 邮箱验证过的用户
    // 用户 :2 资料完善的用户
    // > 10 是管理员
    // > 50 是超级管理员
    role: {
        type: Number,
        default : 0
    },
    meta: {
        createAt: {
            type: Date,
            default: Date.now()
        },
        updateAt: {
            type: Date,
            default: Date.now()
        }
    },
})

UserSchema.pre('save', function (next) {
    var user = this
    if (this.isNew) {
        this.meta.createAt = this.meta.updateAt = Date.now()
    } else {
        this.meta.updateAt = Date.now()
    }

    bcrypt.genSalt(SALT_WORK_FACTOR, function (err, salt) {
        if (err) return next(err)
        bcrypt.hash(user.password, salt, function (err, hash) {
            if (err) return next(err)

            user.password = hash
            next()
        })
    })
})
UserSchema.methods = {
    comparePassword:function (_passwrod,cb) { 
        bcrypt.compare(_passwrod, this.password, function(err,isMatch){
            if (err) return cb(err)
            cb(null, isMatch)
        })
    }
}
UserSchema.statics = {
    fetch: function (cb) { // 取出数据库所有数据
        return this
            .find({})
            .sort('meta.updateAt')
            .exec(cb)
    },
    findById: function (id, cb) { // 取出数据单条所有数据
        return this
            .findOne({ _id: id })
            .exec(cb)
    }
}

module.exports = UserSchema